home *** CD-ROM | disk | FTP | other *** search
/ Interactive Web Graphics with Shout 3D / Interactive Web Graphics With Shout 3D.iso / mac / Code / Chapter Code.exe / Chapter09 / ChangeSpeedPanel.java < prev    next >
Text File  |  2000-10-13  |  2KB  |  80 lines

  1.  
  2. package applets;
  3.  
  4. import shout3d.*;
  5. import shout3d.core.*;
  6. import shout3d.math.*;
  7.  
  8.  
  9. public class ChangeSpeedPanel extends Shout3DPanel implements DeviceObserver {
  10.    
  11.    
  12.    Transform t;
  13.    float xPos;
  14.    float speed = 0.0f; //in meters per second
  15.    float limit = 3.0f;
  16.    
  17.    //screen pixels  
  18.    int pixelStartY;
  19.    int pixelEndY;
  20.  
  21.  
  22.    public ChangeSpeedPanel (Shout3DApplet applet){
  23.       super(applet);
  24.    }
  25.    
  26.    
  27.    public void customInitialize() {
  28.       getRenderer().addRenderObserver(this, null);
  29.       addDeviceObserver(this,"MouseInput", null);
  30.         
  31.       t = (Transform) getNodeByName("trans");
  32.       xPos = t.translation.getValue()[0];      
  33.    }
  34.  
  35.  
  36.    protected void finalize()  { 
  37.       getRenderer().removeRenderObserver(this);
  38.       removeDeviceObserver(this,"MouseInput");
  39.    }
  40.  
  41.    public boolean onDeviceInput(DeviceInput di, Object userData) {
  42.       MouseInput mi = (MouseInput) di;
  43.       switch (mi.which){
  44.  
  45.          case MouseInput.DOWN:
  46.  
  47.             pixelStartY = mi.y;
  48.             return true;
  49.             
  50.          case MouseInput.UP:
  51.             speed = 0.0f;
  52.             return true;
  53.  
  54.          case MouseInput.DRAG:
  55.  
  56.             int pixelEndY = mi.y;
  57.             int dragDistanceY = pixelEndY - pixelStartY;
  58.             
  59.             //convert drag to speed
  60.             //at 1 meter/second for each 70 pixels
  61.             speed = dragDistanceY/70f;
  62.             return true;
  63.          
  64.       }//end of switch
  65.  
  66.       return false;
  67.     }
  68.  
  69.  
  70.    public void onPreRender (Renderer r, Object o) {
  71.       
  72.       float xDelta = speed/getFramesPerSecond();
  73.       xPos = xPos + xDelta;
  74.  
  75.       t.translation.set1Value(0, xPos);
  76.    
  77.    }
  78.     
  79.  
  80. } //end of class